﻿#ifndef ANIMATIONMANAGER_PURIFY_H
#define ANIMATIONMANAGER_PURIFY_H

#include <QObject>

#include "animationState_Purify.h"
#include "animationController_Purify.h"
#include "animationParseHEX.h"
#include "syringeCalculator.h"

#include <QThread>


#include "CommonHelper.h"

// 纯化
class AnimationManager_Purify : public QObject
{
    Q_OBJECT

private:
    AnimationManager_Purify();
    ~AnimationManager_Purify();

public:

    static AnimationManager_Purify& I();

    Q_INVOKABLE QVariantMap requestInfo();
    Q_INVOKABLE AnimationCommObject_Purify* requestInfo_object();

    Q_INVOKABLE void reset();
    Q_INVOKABLE void turnWheel(int num, double speed = 1);      // 转盘
    Q_INVOKABLE void turnWheel_posi(int posi, int direct, double speed = 1);
    Q_INVOKABLE void turnWheel_posi(int posi, double speed = 1);        // 自己判断转动方向
    Q_INVOKABLE void addHat();      // 盖盖
    Q_INVOKABLE void changeValve(int idx, bool state);      // 修改指定编号阀门的开关状态
    Q_INVOKABLE void changeSyringe(int idx, double percentage, double speed = 1);       // 这里的速度给的是百分比
    Q_INVOKABLE void resetSyringe(int idx);         // 指定注射器复位

    Q_INVOKABLE void changeColumn(bool state);          // 色谱柱状态
    Q_INVOKABLE void changeDetector(bool state);        // 检测器状态

    Q_INVOKABLE void changeSpeedUnit(int type);         // 修改显示的速度单位
    Q_INVOKABLE int getSpeedUnit();                     // 获取当前的速度单位

    Q_INVOKABLE void changePPump(int state);

    // 管道接口
    Q_INVOKABLE void resetPipe();                       // 清除所有液路中的液体
    Q_INVOKABLE void changePipeDiameter(double diam);   // 修改液路内径（控制管道流速）
    Q_INVOKABLE void setPipeSyringeSpeed(int idx, double speed);     // 这里的速度是 ml/s

    Q_INVOKABLE void crashStop();       // 急停(貌似已弃用)

    // 转盘复位
    Q_INVOKABLE void resetWheel(QString consumable);

    Q_INVOKABLE void debugCommObject(){ _ctrl_equ->debugCommObject(); }

    // 状态获取函数 (临时)
    Q_INVOKABLE bool            isVertexConnect(int v1, int v2);
    Q_INVOKABLE void            printCurrentPath();

    Q_INVOKABLE void updateColor(QString expName);

    Q_INVOKABLE void setConsumableName(QString consumableName);

    // 更新颜色





public:

    bool checkNullptr();        // 检测空指针的缩写

    QMap<int, QColor> getSyringeColorFromDatabase(QString expname);
    QMap<int, QColor> getSyringeColorFromDatabase(int id = 1);      // 和数据库中execConfig的内容对接



    AnimationState_Purify*         _state_equ;
    AnimationController_Purify*    _ctrl_equ;


};

#endif // ANIMATIONMANAGER_PURIFY_H
